package com.bbva.gptf.back.dominio;

import java.sql.Types;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Component;

import com.bbva.jee.arq.spring.core.log.I18nLog;
import com.bbva.jee.arq.spring.core.log.I18nLogFactory;


@Component
@Configurable
public class SpBitacoraCarga {
	
	private static final I18nLog LOG = I18nLogFactory.getLogI18n(SpBitacoraCarga.class);
	
	private SimpleJdbcCall simpleJdbcCall;
    private DataSource dataSource;

    @Autowired
    public void setDataSource(DataSource dataSource) {
          this.dataSource = dataSource;
    }

    @PersistenceContext
    transient EntityManager entityManager;

	
	public void execute(int cdFichero, int tpCarga, Date fhCarga, String nbFichero, int nuRegistro, int cdUsuario, int cdEstCarga, String cdUsuarioUmo){
		String procedureName = "PKG_GPT.SP_BITACORA_CARGA";
        this.simpleJdbcCall = new SimpleJdbcCall(this.dataSource);
        this.simpleJdbcCall.withoutProcedureColumnMetaDataAccess();
        this.simpleJdbcCall.withProcedureName(procedureName);
        this.simpleJdbcCall.declareParameters(new SqlParameter("CD_FICHERO", Types.NUMERIC));
        this.simpleJdbcCall.declareParameters(new SqlParameter("TP_CARGA", Types.NUMERIC));
        this.simpleJdbcCall.declareParameters(new SqlParameter("FH_CARGA", Types.DATE));
        this.simpleJdbcCall.declareParameters(new SqlParameter("NB_FICHERO", Types.VARCHAR));
        this.simpleJdbcCall.declareParameters(new SqlParameter("NU_REGISTRO", Types.NUMERIC));
        this.simpleJdbcCall.declareParameters(new SqlParameter("CD_USUARIO", Types.NUMERIC));
        this.simpleJdbcCall.declareParameters(new SqlParameter("CD_EST_CARGA", Types.NUMERIC));
        this.simpleJdbcCall.declareParameters(new SqlParameter("CD_USUARIO_UMO", Types.VARCHAR));
        Map<String, Object> parametros = new HashMap<String, Object>();
        parametros.put("CD_FICHERO", cdFichero);
        parametros.put("TP_CARGA", tpCarga);
        parametros.put("FH_CARGA", fhCarga);
        parametros.put("NB_FICHERO", nbFichero);
        parametros.put("NU_REGISTRO", nuRegistro);
        parametros.put("CD_USUARIO", cdUsuario);
        parametros.put("CD_EST_CARGA", cdEstCarga);
        parametros.put("CD_USUARIO_UMO", cdUsuarioUmo);
        this.simpleJdbcCall.execute(parametros);

	}
}
